﻿<%@ Page Title="" Language="C#" MasterPageFile="~/Site.Master" AutoEventWireup="true" CodeBehind="View_QueryStringReceiver.aspx.cs" Inherits="AFCEPF.Samples.WebSamples.Concepts.View_QueryStringReceiver" %>
<asp:Content ID="Content1" ContentPlaceHolderID="HeadContent" runat="server">
    <style type="text/css">
        .style1
        {
            font-style: italic;
            font-weight: bold;
        }
    </style>
</asp:Content>
<asp:Content ID="Content2" ContentPlaceHolderID="MainContent" runat="server">
    
    <h3>Récupération des valeurs passées dans le QueryString</h3>

    <p>
    Les valeurs des champs peuvent être récupérées depuis la chaine du <b>QueryString</b> soit par
    </p>
    <ul>
        <li>Le nom du paramètre : <span class="style1">Request.QueryString[&quot;NomDuParamètre&quot;]</span></li>
        <li>La position ordinale du paramètre : <i><b>Request.QuerySting[0]</b></i></li>
    </ul>

    <h4>Valeurs récupérés avec les noms de paramètres :</h4>
    <br />
    <asp:Label ID="lblNameViaNamedParam" runat="server" Text="Label"></asp:Label> 
    <br />
    <asp:Label ID="lblFirstNameViaNamedParam" runat="server" Text="Label"></asp:Label>

    <br /><br />
    
    <h4>Valeurs récupérés avec les index des paramètres :</h4>
    <br />
    <asp:Label ID="lblNameViaOrdinalPosition" runat="server" Text="Label"></asp:Label> 
    <br />
    <asp:Label ID="lblFirstNameViaOrdinalPosition" runat="server" Text="Label"></asp:Label>

    <hr />

    <p>La propriété <b>Request.QueryString</b> est de type <b>NameValueCollection</b>, c'est à dire une collection de paires
    clé-valeur.
    <br />
    On peut donc également itérer sur cette collection et récupérer ainsi toutes les clés, ainsi que toutes 
    les valeurs, comme démontré dans la Label ci-dessous (voir le code dans la méthode 
        <b>iterateQueryString</b> de cette 
    page).    
    </p>
    
    <asp:Label ID="lblQueryStringDump" runat="server" Text="Label"></asp:Label>

    <p>
    <b>Note :</b>
    <br />
    L'avantage de cette approche est qu'elle est très facile à implémenter, et qu'elle permet de bookmarker un page
    donnée avec des critères dans le QueryString (par exemple google fonctionne avec des URL de ce type).
    <br />
    Les désavantages de cette méthode sont :
    </p>
    <ul>
        <li>La chaine envoyée en tant que QueryString est limitée en taille. Si vous 
            souhaitez envoyer beaucoup d&#39;informations, ce n&#39;est pas adapté.</li>
        <li>Le QueryString est visible dans l&#39;URL, par conséquent on ne peut y faire figurer 
            des infos sensibles (login et password par exemple). C'est principalement par
            le biais d'informations envoyées via le QueryString que sont faites les attaques
            par injection SQL.</li>
    </ul>
    <br />
    <p>
    <b>Note :</b>
    <br />
    On peut aussi crypter les noms et valeurs des éléments du QueryString pour se prémunir d'une utilisation 
    détournée, mais cela reste quand même une approche peu structurée dans sa globalité. Pour une classe intéressante
    permettant de crypter/décrypter efficacement les QueryString, voir <a href="http://www.codeproject.com/KB/aspnet/EncodedUrlBuilder.aspx">cet article sur CodeProject</a>.
    <br />
    On préférera donc passer des valeurs entre les pages en utilisant d'autres moyens, comme par exemple
    l'utilisation de variable de Session, comme démontré dans cette page
    </p>

</asp:Content>
